home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / PLAYERSHOOT.s < prev    next >
Text File  |  1995-09-12  |  15KB  |  1,006 lines

  1.  
  2. PLR1_clicked: dc.b 0
  3. PLR2_clicked: dc.b 0
  4. popping: ds.l 5*4
  5. targdist: dc.w 0
  6. targetydiff: dc.l 0
  7. PLR1_TimeToShoot: dc.w 0
  8. PLR2_TimeToShoot: dc.w 0
  9.  
  10. MaxFrame: dc.w 0
  11.  
  12. Player1Shot:
  13.  
  14.  tst.w PLR1_TimeToShoot
  15.  beq.s okcanfire
  16.  
  17.  move.w TempFrames,d0
  18.  sub.w d0,PLR1_TimeToShoot
  19.  bge PLR1_nofire
  20.  move.w #0,PLR1_TimeToShoot
  21.  bra PLR1_nofire
  22.  
  23. okcanfire:
  24.  
  25.  lea PLR1_GunData,a6
  26.  moveq #0,d0
  27.  move.b p1_gunselected,d0
  28.  move.b d0,tempgun
  29.  
  30.  move.l #GunAnims,a0
  31.  move.b 7(a0,d0.w*8),MaxFrame
  32.  
  33.  lsl.w #2,d0
  34.  lea (a6,d0.w*8),a6
  35.  move.w 14(a6),BulletSpd
  36.  
  37.  tst.w 12(a6)
  38.  beq.s .itsaclick
  39.  
  40.  tst.b p1_fire
  41.  beq PLR1_nofire
  42.  bra .itsahold
  43.  
  44. .itsaclick:
  45.  tst.b p1_clicked
  46.  beq PLR1_nofire
  47.  
  48. .itsahold:
  49.  
  50.  move.w PLR1_angpos,d0
  51.  move.l #SineTable,a0
  52.  lea (a0,d0.w),a0
  53.  move.w (a0),tempxdir 
  54.  move.w 2048(a0),tempzdir
  55.  move.w PLR1_xoff,tempxoff
  56.  move.w PLR1_zoff,tempzoff
  57.  move.l PLR1_yoff,tempyoff
  58.  add.l #20*128,tempyoff
  59.  move.b PLR1_StoodInTop,tempStoodInTop
  60.  move.l PLR1_Roompt,tempRoompt
  61.  move.l #%1111111111110111000001,d7
  62.  move.w #-1,d0
  63.  move.l #0,targetydiff
  64.  move.l #$7fff,d1
  65.  
  66.  move.l ZoneAdds,a3
  67.  
  68.  move.l #PLR1_ObsInLine,a1
  69.  move.l ObjectData,a0
  70.  move.l #PLR1_ObjDists,a2
  71. findclosestinline
  72.  tst.w (a0)
  73.  blt outofline
  74.  tst.b (a1)+
  75.  beq.s notlinedup
  76.  btst #0,17(a0)
  77.  beq.s notlinedup
  78.  tst.w 12(a0)
  79.  blt.s notlinedup
  80.  move.b 16(a0),d6
  81.  btst d6,d7
  82.  beq.s notlinedup
  83.  tst.b numlives(a0)
  84.  beq.s notlinedup
  85.  move.w (a0),d5
  86.  move.w (a2,d5.w*2),d6
  87.  move.w 4(a0),d2
  88.  ext.l d2
  89.  asl.l #7,d2
  90.  sub.l PLR1_yoff,d2
  91.  move.l d2,d3
  92.  bge.s .oknotneg
  93.  neg.l d2
  94. .oknotneg:
  95.  divs #44,d2
  96.  cmp.w d6,d2
  97.  bgt.s notlinedup
  98.  
  99.  cmp.w d6,d1
  100.  blt.s notlinedup
  101.  move.w d6,d1
  102.  move.l a0,a5
  103.  
  104. ; We have a closer enemy lined up.
  105.  move.l d3,targetydiff 
  106.  move.w d5,d0
  107.  
  108. notlinedup:
  109.  add.w #64,a0
  110.  bra findclosestinline
  111.  
  112. outofline:
  113.  
  114.  
  115.  move.w d1,targdist
  116.  
  117.  move.l targetydiff,d5
  118.  sub.l PLR1_height,d5
  119.  add.l #18*256,d5
  120.  move.w d1,closedist
  121.  
  122.  move.w BulletSpd,d2
  123.  asr.w d2,d1
  124.  tst.w d1
  125.  bgt.s okdistthing
  126.  moveq #1,d1
  127. okdistthing
  128.  divs d1,d5
  129.  move.w d5,bulyspd
  130.  
  131.  move.w (a6),d2
  132.  moveq #0,d1
  133.  move.b 2(a6),d1
  134.  cmp.w d1,d2
  135.  bge.s .okcanshoot
  136.  
  137.  move.l PLR1_Obj,a2
  138.  move.w (a2),d0
  139.  move.l #ObjRotated,a2
  140.  move.l (a2,d0.w*8),Noisex
  141.  move.w #300,Noisevol
  142.  move.b #12,Samplenum+1
  143.  clr.b notifplaying
  144.  move.b #$fb,IDNUM
  145.  jsr MakeSomeNoise
  146.  
  147.  rts
  148.  
  149. .okcanshoot:
  150.  
  151.  move.w 8(a6),PLR1_TimeToShoot
  152.  
  153.  move.b MaxFrame,PLR1_GunFrame
  154.  sub.w d1,d2
  155.  move.w d2,(a6)
  156.  
  157.  move.l PLR1_Obj,a2
  158.  move.w (a2),d2
  159.  move.l #ObjRotated,a2
  160.  move.l (a2,d2.w*8),Noisex
  161.  move.w #300,Noisevol
  162.  move.b 3(a6),Samplenum+1
  163.  move.b #2,chanpick
  164.  clr.b notifplaying
  165.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  166.  move.b #$fb,IDNUM
  167.  jsr MakeSomeNoise
  168.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  169.  
  170.  tst.w d0
  171.  blt nothingtoshoot
  172.  
  173.  tst.b 5(a6)
  174.  beq PLR1FIREBULLET
  175.  
  176. ; instant effect: check for hitting:
  177.  
  178.  move.w 22(a6),d7
  179.  
  180. FIREBULLETS:
  181.  
  182.  movem.l a0/a1/d7/d0/a5,-(a7)
  183.  jsr GetRand
  184.  
  185.  move.l ObjectPoints,a1
  186.  move.w (a5),d1
  187.  lea (a1,d1.w*8),a1
  188.  
  189.  and.w #$7fff,d0
  190.  move.w (a1),d1
  191.  sub.w PLR1_xoff,d1
  192.  muls d1,d1
  193.  move.w 4(a1),d2
  194.  sub.w PLR1_zoff,d2
  195.  muls d2,d2
  196.  add.l d2,d1
  197.  asr.l #6,d1
  198.  ext.l d0
  199.  asl.l #1,d0
  200.  cmp.l d1,d0
  201.  bgt.s .hitplr
  202.  
  203.  movem.l (a7)+,a0/a1/d7/d0/a5
  204.  move.l d0,-(a7)
  205.  bsr PLR1MISSINSTANT
  206.  move.l (a7)+,d0
  207.  
  208.  bra.s .missplr
  209. .hitplr: 
  210.  
  211.  movem.l (a7)+,a0/a1/d7/d0/a5
  212.  move.l d0,-(a7)
  213.  bsr PLR1HITINSTANT
  214.  move.l (a7)+,d0
  215.  
  216. .missplr:
  217.  
  218.  subq #1,d7
  219.  bgt.s FIREBULLETS
  220.  
  221.  rts
  222.  
  223. nothingtoshoot:
  224.  move.w #0,bulyspd
  225.  tst.b 5(a6)
  226.  beq PLR1FIREBULLET
  227.  
  228.  move.w #0,bulyspd
  229.  
  230.  move.w PLR1_xoff,oldx
  231.  move.w PLR1_zoff,oldz
  232.  move.w PLR1_sinval,d0
  233.  asr.w #7,d0
  234.  add.w oldx,d0
  235.  move.w d0,newx
  236.  move.w PLR1_cosval,d0
  237.  asr.w #7,d0
  238.  add.w oldz,d0
  239.  move.w d0,newz
  240.  move.l PLR1_yoff,d0
  241.  add.l #20*128,d0
  242.  move.l d0,oldy
  243.  
  244.  move.l d0,d1
  245.  jsr GetRand
  246.  and.w #$fff,d0
  247.  sub.w #$800,d0
  248.  ext.l d0
  249.  add.l d0,d1
  250.  
  251.  move.l oldy,TESTY
  252.  
  253.  move.l d1,newy
  254.  move.l newy,TESTY+4
  255.  
  256.  st exitfirst
  257.  clr.b wallbounce
  258.  move.w #0,extlen
  259.  move.b #$ff,awayfromwall
  260.  move.w #%0000010000000000,wallflags
  261.  move.l #0,StepUpVal
  262.  move.l #$1000000,StepDownVal
  263.  move.l #0,thingheight
  264.  move.l PLR1_Roompt,objroom
  265.  movem.l d0-d7/a0-a6,-(a7)
  266.  
  267. .again:
  268.  jsr MoveObject
  269.  tst.b hitwall
  270.  bne.s .nofurther
  271.  move.w newx,d0
  272.  sub.w oldx,d0
  273.  add.w d0,oldx
  274.  add.w d0,newx
  275.  move.w newz,d0
  276.  sub.w oldz,d0
  277.  add.w d0,oldz
  278.  add.w d0,newz
  279.  move.l newy,d0
  280.  sub.l oldy,d0
  281.  add.l d0,oldy
  282.  add.l d0,newy
  283.  bra .again
  284.  
  285. .nofurther:
  286.  
  287.  movem.l (a7)+,d0-d7/a0-a6
  288.  
  289.  move.l PlayerShotData,a0
  290.  move.w #19,d1
  291. .findonefree2
  292.  move.w 12(a0),d2
  293.  blt.s .foundonefree2
  294.  adda.w #64,a0
  295.  dbra d1,.findonefree2
  296.  
  297.  rts
  298.  
  299. .foundonefree2:
  300.  
  301.  move.l ObjectPoints,a1
  302.  move.w (a0),d2
  303.  move.w newx,(a1,d2.w*8)
  304.  move.w newz,4(a1,d2.w*8)
  305.  move.b #1,shotstatus(a0)
  306.  move.w #0,shotgrav(a0)
  307.  move.b p1_gunselected,shotsize(a0)
  308.  move.b #0,shotanim(a0)
  309.  
  310.  move.l objroom,a1
  311.  move.w (a1),12(a0)
  312.  st worry(a0)
  313.  move.l wallhitheight,d0
  314.  move.l newy,TESTY+8
  315.  move.l d0,TESTY+12
  316.  move.l d0,accypos(a0)
  317.  asr.l #7,d0
  318.  move.w d0,4(a0)
  319.  
  320.  rts
  321.  
  322. PLR1_nofire:
  323.  
  324.  rts
  325.  
  326. TESTY: dc.l 0,0,0,0
  327.  
  328. Player2Shot:
  329.  
  330.  tst.w PLR2_TimeToShoot
  331.  beq.s okcanfire2
  332.  
  333.  move.w TempFrames,d0
  334.  sub.w d0,PLR2_TimeToShoot
  335.  bge PLR2_nofire
  336.  move.w #0,PLR2_TimeToShoot
  337.  bra PLR2_nofire
  338.  
  339. okcanfire2:
  340.  
  341.  
  342.  lea PLR2_GunData,a6
  343.  moveq #0,d0
  344.  move.b p2_gunselected,d0
  345.  move.b d0,tempgun
  346.  
  347.  move.l #GunAnims,a0
  348.  move.b 7(a0,d0.w*8),MaxFrame
  349.  
  350.  lsl.w #2,d0
  351.  lea (a6,d0.w*8),a6
  352.  move.w 14(a6),BulletSpd
  353.  
  354.  tst.w 12(a6)
  355.  beq.s .itsaclick
  356.  
  357.  tst.b p2_fire
  358.  beq PLR2_nofire
  359.  bra .itsahold
  360.  
  361. .itsaclick:
  362.  tst.b p2_clicked
  363.  beq PLR2_nofire
  364.  
  365. .itsahold:
  366.  
  367.  move.w PLR2_angpos,d0
  368.  move.l #SineTable,a0
  369.  lea (a0,d0.w),a0
  370.  move.w (a0),tempxdir 
  371.  move.w 2048(a0),tempzdir
  372.  move.w PLR2_xoff,tempxoff
  373.  move.w PLR2_zoff,tempzoff
  374.  move.l PLR2_yoff,tempyoff
  375.  add.l #20*128,tempyoff
  376.  move.b PLR2_StoodInTop,tempStoodInTop
  377.  move.l PLR2_Roompt,tempRoompt
  378.  move.l #%1111111111010111100001,d7
  379.  move.w #-1,d0
  380.  move.l #0,targetydiff
  381.  move.l #$7fff,d1
  382.  
  383.  move.l ZoneAdds,a3
  384.  
  385.  move.l #PLR2_ObsInLine,a1
  386.  move.l ObjectData,a0
  387.  move.l #PLR2_ObjDists,a2
  388. findclosestinline2
  389.  tst.w (a0)
  390.  blt outofline2
  391.  tst.b (a1)+
  392.  beq.s notlinedup2
  393.  btst #1,17(a0)
  394.  beq.s notlinedup2
  395.  tst.w 12(a0)
  396.  blt.s notlinedup2
  397.  move.b 16(a0),d6
  398.  btst d6,d7
  399.  beq.s notlinedup2
  400.  tst.b numlives(a0)
  401.  beq.s notlinedup2
  402.  move.w (a0),d5
  403.  move.w (a2,d5.w*2),d6
  404.  move.w 4(a0),d2
  405.  ext.l d2
  406.  asl.l #7,d2
  407.  sub.l PLR2_yoff,d2
  408.  move.l d2,d3
  409.  bge.s .oknotneg
  410.  neg.l d2
  411. .oknotneg:
  412.  divs #44,d2
  413.  cmp.w d6,d2
  414.  bgt.s notlinedup2
  415.  
  416.  cmp.w d6,d1
  417.  blt.s notlinedup2
  418.  move.w d6,d1
  419.  move.l a0,a5
  420.  
  421. ; We have a closer enemy lined up.
  422.  move.l d3,targetydiff 
  423.  move.w d5,d0
  424.  
  425. notlinedup2:
  426.  add.w #64,a0
  427.  bra findclosestinline2
  428.  
  429. outofline2:
  430.  
  431.  
  432.  move.w d1,targdist
  433.  
  434.  move.l targetydiff,d5
  435.  sub.l PLR2_height,d5
  436.  add.l #18*256,d5
  437.  move.w d1,closedist
  438.  
  439.  move.w BulletSpd,d2
  440.  asr.w d2,d1
  441.  tst.w d1
  442.  bgt.s okdistthing2
  443.  moveq #1,d1
  444. okdistthing2
  445.  divs d1,d5
  446.  move.w d5,bulyspd
  447.  
  448.  move.w (a6),d2
  449.  moveq #0,d1
  450.  move.b 2(a6),d1
  451.  cmp.w d1,d2
  452.  bge.s .okcanshoot
  453.  
  454.  move.l PLR2_Obj,a2
  455.  move.w (a2),d0
  456.  move.l #ObjRotated,a2
  457.  move.l (a2,d0.w*8),Noisex
  458.  move.w #300,Noisevol
  459.  move.b #12,Samplenum+1
  460.  clr.b notifplaying
  461.  move.b #$fb,IDNUM
  462.  jsr MakeSomeNoise
  463.  
  464.  rts
  465.  
  466. .okcanshoot:
  467.  
  468.  move.w 8(a6),PLR2_TimeToShoot
  469.  
  470.  move.b MaxFrame,PLR2_GunFrame
  471.  sub.w d1,d2
  472.  move.w d2,(a6)
  473.  
  474.  move.l PLR2_Obj,a2
  475.  move.w (a2),d2
  476.  move.l #ObjRotated,a2
  477.  move.l (a2,d2.w*8),Noisex
  478.  move.w #300,Noisevol
  479.  move.b 3(a6),Samplenum+1
  480.  move.b #2,chanpick
  481.  clr.b notifplaying
  482.  movem.l d0/a0/d5/d6/d7/a6/a5,-(a7)
  483.  move.b #$fb,IDNUM
  484.  jsr MakeSomeNoise
  485.  movem.l (a7)+,d0/a0/d5/d6/d7/a6/a5
  486.  
  487.  tst.w d0
  488.  blt nothingtoshoot2
  489.  
  490.  tst.b 5(a6)
  491.  beq PLR2FIREBULLET
  492.  
  493. ; instant effect: check for hitting:
  494.  
  495.  move.w 22(a6),d7
  496.  
  497. FIREBULLETS2:
  498.  
  499.  movem.l a0/a1/d7/d0/a5,-(a7)
  500.  jsr GetRand
  501.  
  502.  move.l ObjectPoints,a1
  503.  move.w (a5),d1
  504.  lea (a1,d1.w*8),a1
  505.  
  506.  and.w #$7fff,d0
  507.  move.w (a1),d1
  508.  sub.w PLR2_xoff,d1
  509.  muls d1,d1
  510.  move.w 4(a1),d2
  511.  sub.w PLR2_zoff,d2
  512.  muls d2,d2
  513.  add.l d2,d1
  514.  asr.l #6,d1
  515.  ext.l d0
  516.  asl.l #1,d0
  517.  cmp.l d1,d0
  518.  bgt.s .hitplr
  519.  
  520.  movem.l (a7)+,a0/a1/d7/d0/a5
  521.  move.l d0,-(a7)
  522.  bsr PLR2MISSINSTANT
  523.  move.l (a7)+,d0
  524.  
  525.  bra.s .missplr
  526. .hitplr: 
  527.  
  528.  movem.l (a7)+,a0/a1/d7/d0/a5
  529.  move.l d0,-(a7)
  530.  bsr PLR2HITINSTANT
  531.  move.l (a7)+,d0
  532.  
  533. .missplr:
  534.  
  535.  subq #1,d7
  536.  bgt.s FIREBULLETS2
  537.  
  538.  rts
  539.  
  540. nothingtoshoot2:
  541.  move.w #0,bulyspd
  542.  tst.b 5(a6)
  543.  beq PLR2FIREBULLET
  544.  
  545.  move.w #0,bulyspd
  546.  
  547.  move.w PLR2_xoff,oldx
  548.  move.w PLR2_zoff,oldz
  549.  move.w PLR2_sinval,d0
  550.  asr.w #7,d0
  551.  add.w oldx,d0
  552.  move.w d0,newx
  553.  move.w PLR2_cosval,d0
  554.  asr.w #7,d0
  555.  add.w oldz,d0
  556.  move.w d0,newz
  557.  move.l PLR2_yoff,d0
  558.  add.l #20*128,d0
  559.  move.l d0,oldy
  560.  
  561.  move.l d0,d1
  562.  jsr GetRand
  563.  and.w #$fff,d0
  564.  sub.w #$800,d0
  565.  ext.l d0
  566.  add.l d0,d1
  567.  
  568.  move.l d1,newy
  569.  
  570.  st exitfirst
  571.  clr.b wallbounce
  572.  move.w #0,extlen
  573.  move.b #$ff,awayfromwall
  574.  move.w #%0000010000000000,wallflags
  575.  move.l #0,StepUpVal
  576.  move.l #$1000000,StepDownVal
  577.  move.l #0,thingheight
  578.  move.l PLR2_Roompt,objroom
  579.  movem.l d0-d7/a0-a6,-(a7)
  580.  
  581. .again:
  582.  jsr MoveObject
  583.  tst.b hitwall
  584.  bne.s .nofurther
  585.  move.w newx,d0
  586.  sub.w oldx,d0
  587.  add.w d0,oldx
  588.  add.w d0,newx
  589.  move.w newz,d0
  590.  sub.w oldz,d0
  591.  add.w d0,oldz
  592.  add.w d0,newz
  593.  move.l newy,d0
  594.  sub.l oldy,d0
  595.  add.l d0,oldy
  596.  add.l d0,newy
  597.  bra .again
  598.  
  599. .nofurther:
  600.  
  601.  movem.l (a7)+,d0-d7/a0-a6
  602.  
  603.  move.l PlayerShotData,a0
  604.  move.w #19,d1
  605. .findonefree2
  606.  move.w 12(a0),d2
  607.  blt.s .foundonefree2
  608.  adda.w #64,a0
  609.  dbra d1,.findonefree2
  610.  
  611.  rts
  612.  
  613. .foundonefree2:
  614.  
  615.  move.l ObjectPoints,a1
  616.  move.w (a0),d2
  617.  move.w newx,(a1,d2.w*8)
  618.  move.w newz,4(a1,d2.w*8)
  619.  move.b #1,shotstatus(a0)
  620.  move.w #0,shotgrav(a0)
  621.  move.b p2_gunselected,shotsize(a0)
  622.  move.b #0,shotanim(a0)
  623.  
  624.  move.l objroom,a1
  625.  move.w (a1),12(a0)
  626.  st worry(a0)
  627.  move.l wallhitheight,d0
  628.  move.l d0,accypos(a0)
  629.  asr.l #7,d0
  630.  move.w d0,4(a0)
  631.  
  632.  rts
  633.  
  634. PLR2_nofire:
  635.  
  636.  rts
  637.  
  638.  
  639. BulletSpd: dc.w 0
  640.  
  641. *******************************************************
  642.  
  643. tempyoff: dc.l 0
  644. tempStoodInTop: dc.w 0
  645. tempangpos: dc.w 0
  646. tempxdir: dc.w 0
  647. tempzdir: dc.w 0
  648. tempgun: dc.w 0
  649. tstfire: dc.w 0
  650. PLR1FIREBULLET:
  651.  
  652.  move.w #256,d6
  653.  move.w #256,d5
  654.  
  655.  move.b MaxFrame,PLR1_GunFrame
  656.  move.l PLR1_Obj,a2
  657.  bra firefive
  658.  
  659. PLR2FIREBULLET:
  660.  
  661.  move.b MaxFrame,PLR2_GunFrame
  662.  move.l PLR2_Obj,a2
  663.  
  664. firefive:
  665.  
  666.  move.l PlayerShotData,a0
  667.  move.w #19,d1
  668. .findonefree
  669.  move.w 12(a0),d0
  670.  blt.s .foundonefree
  671.  adda.w #64,a0
  672.  dbra d1,.findonefree
  673.  
  674.  rts
  675.  
  676. .foundonefree
  677.  move.w 16(a6),shotgrav(a0)
  678.  move.w 18(a6),shotflags(a0)
  679.  
  680.  move.w bulyspd,d0
  681.  cmp.w #20,d0
  682.  blt.s .okdownspd
  683.  move.w #20,d0
  684. .okdownspd:
  685.  
  686.  cmp.w #-20,d0
  687.  blt.s .okupspd
  688.  move.w #-20,d0
  689. .okupspd:
  690.  
  691.  add.w 20(a6),d0
  692.  
  693.  move.w d0,bulyspd
  694.  
  695.  move.l #ObjRotated,a2
  696.  move.b tempgun,shotsize(a0)
  697.  move.b 6(a6),shotpower(a0)
  698.  
  699.  move.l ObjectPoints,a1
  700.  move.w (a0),d1
  701.  lea (a1,d1.w*8),a1
  702.  move.w tempxoff,(a1)
  703.  move.w tempzoff,4(a1)
  704.  move.w tempxdir,d0
  705.  ext.l d0
  706.  
  707.  move.w BulletSpd,d1
  708.  asl.l d1,d0
  709.  move.l d0,shotxvel(a0)
  710.  move.w tempzdir,d0
  711.  ext.l d0
  712.  asl.l d1,d0
  713.  move.l d0,shotzvel(a0)
  714.  move.w bulyspd,shotyvel(a0)
  715.  move.b tempStoodInTop,ObjInTop(a0)
  716.  move.w #0,shotlife(a0)
  717.  move.l d7,EnemyFlags(a0)
  718.  move.l tempRoompt,a2
  719.  move.w (a2),12(a0)
  720.  move.l tempyoff,d0
  721.  add.l #20*128,d0
  722.  move.l d0,accypos(a0)
  723.  st worry(a0)
  724.  asr.l #7,d0
  725.  move.w d0,4(a0)
  726.  
  727.  rts
  728.  
  729. PLR1HITINSTANT:
  730.  
  731. ; Just blow it up.
  732.  
  733.  move.l PlayerShotData,a0
  734.  move.w #19,d1
  735. .findonefree
  736.  move.w 12(a0),d2
  737.  blt.s .foundonefree
  738.  adda.w #64,a0
  739.  dbra d1,.findonefree
  740.  
  741.  rts
  742.  
  743. .foundonefree:
  744.  
  745.  move.l ObjectPoints,a1
  746.  move.w (a0),d2
  747.  move.l (a1,d0.w*8),(a1,d2.w*8)
  748.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  749.  move.b #1,shotstatus(a0)
  750.  move.w #0,shotgrav(a0)
  751.  move.b p1_gunselected,shotsize(a0)
  752.  move.b #0,shotanim(a0)
  753.  
  754.  move.w 4(a5),d1
  755.  ext.l d1
  756.  asl.l #7,d1
  757.  move.l d1,accypos(a0)
  758.  move.w 12(a5),12(a0)
  759.  st worry(a0)
  760.  move.w 4(a5),4(a0)
  761.  
  762.  move.b 6(a6),d0
  763.  add.b d0,damagetaken(a5)
  764.  
  765.  move.w tempxdir,d1
  766.  ext.l d1
  767.  asl.l #3,d1
  768.  swap d1
  769.  move.w d1,ImpactX(a5)
  770.  move.w tempzdir,d1
  771.  ext.l d1
  772.  asl.l #3,d1
  773.  swap d1
  774.  move.w d1,ImpactZ(a5)
  775.  
  776.  rts
  777.  
  778. PLR1MISSINSTANT: 
  779.  
  780.  move.w PLR1_xoff,oldx
  781.  move.w PLR1_zoff,oldz
  782.  move.l PLR1_yoff,d1
  783.  add.l #20*128,d1
  784.  move.l d1,oldy
  785.  
  786.  move.w (a5),d0
  787.  move.l ObjectPoints,a1
  788.  move.w (a1,d0.w*8),d2
  789.  sub.w oldx,d2
  790.  asr.w #1,d2
  791.  add.w oldx,d2
  792.  move.w d2,newx
  793.  move.w 4(a1,d0.w*8),d2
  794.  sub.w oldz,d2
  795.  asr.w #1,d2
  796.  add.w oldz,d2
  797.  move.w d2,newz
  798.  
  799.  move.w 4(a0),d2
  800.  ext.l d2
  801.  asl.l #7,d2
  802.  move.l d2,newy
  803.  
  804.  st exitfirst
  805.  clr.b wallbounce
  806.  move.w #0,extlen
  807.  move.b #$ff,awayfromwall
  808.  move.w #%0000010000000000,wallflags
  809.  move.l #0,StepUpVal
  810.  move.l #$1000000,StepDownVal
  811.  move.l #0,thingheight
  812.  move.l PLR1_Roompt,objroom
  813.  movem.l d0-d7/a0-a6,-(a7)
  814.  
  815. .again:
  816.  jsr MoveObject
  817.  tst.b hitwall
  818.  bne.s .nofurther
  819.  move.w newx,d1
  820.  sub.w oldx,d1
  821.  add.w d1,oldx
  822.  add.w d1,newx
  823.  move.w newz,d1
  824.  sub.w oldz,d1
  825.  add.w d1,oldz
  826.  add.w d1,newz
  827.  move.l newy,d1
  828.  sub.l oldy,d1
  829.  add.l d1,oldy
  830.  add.l d1,newy
  831.  bra .again
  832.  
  833. .nofurther:
  834.  
  835.  movem.l (a7)+,d0-d7/a0-a6
  836.  
  837.  move.l PlayerShotData,a0
  838.  move.w #19,d1
  839. .findonefree2
  840.  move.w 12(a0),d2
  841.  blt.s .foundonefree2
  842.  adda.w #64,a0
  843.  dbra d1,.findonefree2
  844.  
  845.  rts
  846.  
  847. .foundonefree2:
  848.  
  849.  move.l ObjectPoints,a1
  850.  move.w (a0),d2
  851.  move.w newx,(a1,d2.w*8)
  852.  move.w newz,4(a1,d2.w*8)
  853.  move.b #1,shotstatus(a0)
  854.  move.w #0,shotgrav(a0)
  855.  move.b p1_gunselected,shotsize(a0)
  856.  move.b #0,shotanim(a0)
  857.  
  858.  move.l objroom,a1
  859.  move.w (a1),12(a0)
  860.  st worry(a0)
  861.  move.l newy,d1
  862.  move.l d1,accypos(a0)
  863.  asr.l #7,d1
  864.  move.w d1,4(a0)
  865.  
  866.  rts
  867.  
  868.  
  869. PLR2HITINSTANT:
  870.  
  871. ; Just blow it up.
  872.  
  873.  move.l PlayerShotData,a0
  874.  move.w #19,d1
  875. .findonefree
  876.  move.w 12(a0),d2
  877.  blt.s .foundonefree
  878.  adda.w #64,a0
  879.  dbra d1,.findonefree
  880.  
  881.  rts
  882.  
  883. .foundonefree:
  884.  
  885.  move.l ObjectPoints,a1
  886.  move.w (a0),d2
  887.  move.l (a1,d0.w*8),(a1,d2.w*8)
  888.  move.l 4(a1,d0.w*8),4(a1,d2.w*8)
  889.  move.b #1,shotstatus(a0)
  890.  move.w #0,shotgrav(a0)
  891.  move.b p2_gunselected,shotsize(a0)
  892.  move.b #0,shotanim(a0)
  893.  
  894.  move.w 4(a5),d1
  895.  ext.l d1
  896.  asl.l #7,d1
  897.  move.l d1,accypos(a0)
  898.  move.w 12(a5),12(a0)
  899.  st worry(a0)
  900.  move.w 4(a5),4(a0)
  901.  
  902.  move.b 6(a6),d0
  903.  add.b d0,damagetaken(a5)
  904.  
  905.  move.w tempxdir,d1
  906.  ext.l d1
  907.  asl.l #3,d1
  908.  swap d1
  909.  move.w d1,ImpactX(a5)
  910.  move.w tempzdir,d1
  911.  ext.l d1
  912.  asl.l #3,d1
  913.  swap d1
  914.  move.w d1,ImpactZ(a5)
  915.  
  916.  rts
  917.  
  918. PLR2MISSINSTANT: 
  919.  
  920.  move.w PLR2_xoff,oldx
  921.  move.w PLR2_zoff,oldz
  922.  move.l PLR2_yoff,d1
  923.  add.l #20*128,d1
  924.  move.l d1,oldy
  925.  
  926.  move.w (a5),d0
  927.  move.l ObjectPoints,a1
  928.  move.w (a1,d0.w*8),d2
  929.  sub.w oldx,d2
  930.  asr.w #1,d2
  931.  add.w oldx,d2
  932.  move.w d2,newx
  933.  move.w 4(a1,d0.w*8),d2
  934.  sub.w oldz,d2
  935.  asr.w #1,d2
  936.  add.w oldz,d2
  937.  move.w d2,newz
  938.  move.w 4(a0),d2
  939.  ext.l d2
  940.  asl.l #7,d2
  941.  move.l d2,newy
  942.  
  943.  st exitfirst
  944.  clr.b wallbounce
  945.  move.w #0,extlen
  946.  move.b #$ff,awayfromwall
  947.  move.w #%0000010000000000,wallflags
  948.  move.l #0,StepUpVal
  949.  move.l #$1000000,StepDownVal
  950.  move.l #0,thingheight
  951.  move.l PLR2_Roompt,objroom
  952.  movem.l d0-d7/a0-a6,-(a7)
  953.  
  954. .again:
  955.  jsr MoveObject
  956.  tst.b hitwall
  957.  bne.s .nofurther
  958.  move.w newx,d1
  959.  sub.w oldx,d1
  960.  add.w d1,oldx
  961.  add.w d1,newx
  962.  move.w newz,d1
  963.  sub.w oldz,d1
  964.  add.w d1,oldz
  965.  add.w d1,newz
  966.  move.l newy,d1
  967.  sub.l oldy,d1
  968.  add.l d1,oldy
  969.  add.l d1,newy
  970.  bra .again
  971.  
  972. .nofurther:
  973.  
  974.  movem.l (a7)+,d0-d7/a0-a6
  975.  
  976.  move.l PlayerShotData,a0
  977.  move.w #19,d1
  978. .findonefree2
  979.  move.w 12(a0),d2
  980.  blt.s .foundonefree2
  981.  adda.w #64,a0
  982.  dbra d1,.findonefree2
  983.  
  984.  rts
  985.  
  986. .foundonefree2:
  987.  
  988.  move.l ObjectPoints,a1
  989.  move.w (a0),d2
  990.  move.w newx,(a1,d2.w*8)
  991.  move.w newz,4(a1,d2.w*8)
  992.  move.b #1,shotstatus(a0)
  993.  move.w #0,shotgrav(a0)
  994.  move.b p2_gunselected,shotsize(a0)
  995.  move.b #0,shotanim(a0)
  996.  
  997.  move.l objroom,a1
  998.  move.w (a1),12(a0)
  999.  st worry(a0)
  1000.  move.l newy,d1
  1001.  move.l d1,accypos(a0)
  1002.  asr.l #7,d1
  1003.  move.w d1,4(a0)
  1004.  
  1005.  rts
  1006.